/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */

ToolMan._eventsFactory = 
{
	fix : function(event)
	{
		if (!event) event = window.event;

		if (event.target)
		{
			if (event.target.nodeType == 3)
				event.target = event.target.parentNode;
		} else if (event.srcElement)
		{
			event.target = event.srcElement;
		}
		return event;
	},

	register : function(element, type, func)
	{
		if (element.addEventListener)
		{
			element.addEventListener(type, func, false);
		} else if (element.attachEvent)
		{
			if (!element._listeners) element._listeners = new Array();
			if (!element._listeners[type]) element._listeners[type] = new Array();
			var workaroundFunc = function()
			{
				func.apply(element, new Array());
			};
			element._listeners[type][func] = workaroundFunc;
			element.attachEvent('on' + type, workaroundFunc);
		}
	},

	unregister : function(element, type, func)
	{
		if (element.removeEventListener)
		{
			element.removeEventListener(type, func, false);
		} else if (element.detachEvent)
		{
			if (element._listeners 
					&& element._listeners[type] 
					&& element._listeners[type][func])
			{
				element.detachEvent('on' + type, 
						element._listeners[type][func]);
			}
		}
	}
};
